home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 26 / AACD 26.iso / AACD / Programming / AllPlaton / Unsorted / FirePowerEdit.AMOS / FirePowerEdit.amosSourceCode < prev    next >
Encoding:
AMOS Source Code  |  1995-07-28  |  36.2 KB  |  1,074 lines

  1. ' *****************************************************  
  2. ' *                                                   *
  3. ' *         Fire Power Level Map Editor Deluxe        *  
  4. ' *                                                   *
  5. ' *               Written by C. Hodges                *
  6. ' *                                                   *
  7. ' * Copyright 1992 by C. Hodges. ALL RIGHTS RESERVED! *
  8. ' *                                                   *
  9. ' *****************************************************
  10. Close Workbench : Close Editor : Request Off : Show On : Hide 
  11. Dim B(19,3),U(92),C(48),Z(3,14,1),S(48),I$(31),DT(10,1)
  12. Global OLFI,VERZ,U(),ERN
  13. OLDDIR$=Dir$
  14. Screen Open 0,320,33,2,0
  15. Curs Off : Palette 0,0 : Paper 0 : Pen 1
  16. Centre "PRESS LEFT BUTTON TO RUN THE EDITOR" : Print 
  17. Print : Centre "OR RIGHT BUTTON FOR INSTRUCTIONS"
  18. Screen Display 0,128,130,,
  19. Fade 1,0,$FFF
  20. Repeat : M=Mouse Key : Until M
  21. On Error Proc HANDLER
  22. Fade 1 : Wait 16 : Screen Close 0
  23. If M=2 Then Gosub ANLEITUNG
  24. If Exist("FIREPOWER:")=0 Then INSERT["FIREPOWER:","PLEASE INSERT FIREPOWER IN ANY DRIVE!"]
  25. Unpack 7 To 0 : Show 
  26. Dir$="FIREPOWER:MapP2/" : F$="FIREPOWER:MapP2/T1"
  27. Screen Hide 0
  28. Screen Open 1,320,72,32,0
  29. For A=0 To 15 : Colour A,0 : Next 
  30. Curs Off : Flash Off : Cls 0
  31. Screen Copy 0,0,0,320,72 To 1,0,0
  32. Screen Copy 0,0,72,320,108 To 0,0,0
  33. Screen 0
  34. For C=0 To 48
  35.   X=C : If X>39 Then Y=8 : X=X-40 Else Y=0
  36.   Get Cblock C+1,X*8,Y,8,8
  37. Next 
  38. Screen Open 2,320,16,16,0 : Curs Off : Flash Off : Get Palette 0 : Cls 0
  39. Screen Hide 2 : Screen Copy 0 To 2
  40. Screen Open 0,320,16,16,0 : Curs Off : Flash Off : Get Palette 2 : Cls 0
  41. Screen Hide 0 : Screen Copy 2 To 0
  42. Screen Open 2,512,512,16,0
  43. For A=0 To 15 : Colour A,0 : Next 
  44. Curs Off : Flash Off : Cls 8
  45. Screen Display 2,128,123,320,172
  46. Screen 0
  47. A$="B: P ; L X=0 ; L Y=0 ; Anim 0,(3,1) ; I YM<123 J B ; "
  48. A$=A$+"A: P ; L X=XM+R0/8*8-2-R0 ; L Y=R1+YM-124/8*8+121-R1 ; I YM<123 J B ; J A ; "
  49. Amal 1,A$
  50. Channel 1 To Sprite 1
  51. A$="Let X=134 ; Let Y=113 ; L RC=2; Anim 0,(1,1) ; "
  52. A$=A$+"B: L RA=X; L RB=Y; PP; I XM>X J R ; "
  53. A$=A$+"   I XM<X J L ; "
  54. A$=A$+"A: I X<138 J C ; "
  55. A$=A$+"   I X>270 J D ; "
  56. A$=A$+"   J B ; "
  57. A$=A$+"R: Let X=X+1 ; L RC=2; Anim 0,(2,1) ; J A ; "
  58. A$=A$+"L: Let X=X-1 ; L RC=-2; Anim 0,(1,1) ; J A ; "
  59. A$=A$+"C: Let X=138 ; J B ; "
  60. A$=A$+"D: Let X=270 ; J B ; "
  61. Channel 2 To Sprite 2
  62. Amal 2,A$
  63. A$="Let X=381 ; Let Y=55 ; Anim 0,(8,5)(7,4)(6,3)(5,2)(4,1)(5,2)(6,3)(7,4) ; "
  64. A$=A$+"A: P ; Let X=381+R2 ; Let Y=55+R3 ; "
  65. A$=A$+"   I R0<R2 J L ; "
  66. A$=A$+"   I R0>R2 J R ; "
  67. A$=A$+"B: I R1<R3 J U ; "
  68. A$=A$+"   I R1>R3 J D ; "
  69. A$=A$+"   J A ; "
  70. A$=A$+"L: Let R2=R2-1 ; J B ; "
  71. A$=A$+"R: Let R2=R2+1 ; J B ; "
  72. A$=A$+"U: Let R3=R3-1 ; J A ; "
  73. A$=A$+"D: Let R3=R3+1 ; J A ; "
  74. Channel 3 To Sprite 3
  75. Amal 3,A$
  76. A$="A: L X=0; I K1=-1 J B; PP; J A; "
  77. A$=A$+"B: L R0=RC; L X=R0*4+RA; L Y=RB+1; "
  78. A$=A$+"C: P; L X=X+R0; "
  79. A$=A$+"   I X<129 J A; "
  80. A$=A$+"   I X>277 J A; "
  81. A$=A$+"   J C; "
  82. Sprite 4,0,0,11
  83. Channel 4 To Sprite 4
  84. Amal 4,A$
  85. CM=2 : Gosub CM
  86. Limit Mouse 128,50 To 447,295
  87. OLFI=1 : VERZ=2 : Restore DATTABLE
  88. For A=1 To 19 : Read B(A,0),B(A,1),B(A,2),B(A,3) : Next 
  89. For A=0 To 92 : Read U(A) : Next 
  90. For A=0 To 48 : Read C(A) : Next 
  91. For A=1 To 3 : Read B : For D=0 To 1 : For C=1 To B : Read Z(A,C,D) : Next : Next : Next 
  92. For A=1 To 48
  93.   For B=1 To 92
  94.     If U(B)=A Then S(A)=B : Exit 
  95.   Next 
  96. Next 
  97. For A=0 To 31 : Read I$(A) : Next 
  98. Reserve As Work 6,4096
  99. OX=0 : OY=0 : E=1
  100. Def Scroll 1,220,18 To 227,28,-1,0 : Def Scroll 2,219,18 To 226,28,1,0
  101. Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  102. Gosub RESETCOLOR
  103. Amal On 
  104. T[-1,"WELCOME!!!"]
  105. Do 
  106.   X=X Screen(1,X Mouse) : Y=Y Screen(1,Y Mouse) : B=0 : MM=M : M=Mouse Key
  107.   If M<>0 and Y<62 Then Gosub BUT : If B>0 Then Gosub MENUBUTTON
  108.   If Y>72 Then CM=6 : BX=(X+OX mod 8)/8+OX/8 : BY=((Y-74)+(OY mod 8))/8+OY/8 Else CM=2
  109.   If CM=6 and M=2 and(BXA<>BX or BYA<>BY or MM=0) Then Gosub LOESCHEN
  110.   If CM=6 and M=1 and(BXA<>BX or BYA<>BY or MM=0) and TYPE>0 Then Gosub SETBUILD
  111.   If X<10 Then OX=Max(Min(OX-2,192),0)
  112.   If X>310 Then OX=Max(Min(OX+2,192),0)
  113.   If Y<10 Then OY=Max(Min(OY-2,340),0)
  114.   If Y>235 Then OY=Max(Min(OY+2,340),0)
  115.   Amreg(1,0)=OX mod 8 : Amreg(1,1)=OY mod 8
  116.   Amreg(3,0)=BX : Amreg(3,1)=BY
  117.   If OX<>OXA or OY<>OYA Then BXA=BX : BYA=BY : OXA=OX : OYA=OY : Wait Vbl : Screen Offset 2,OX,OY
  118.   Gosub CM : If BXA<>BX or BYA<>BY Then Gosub TILEINFO
  119. Loop 
  120. End 
  121. ANLEITUNG:
  122.   Screen Open 0,320,190,4,0
  123.   Curs Off : Flash Off : Paper 0 : Pen 3 : Cls 0
  124.   Palette 0,0,0,0 : Print 
  125.   Centre "WELCOME TO THE WORLD'S BEST" : Print : Print : Pen 2
  126.   Centre "FIREPOWER LEVEL MAP EDITOR DELUXE" : Print : Print 
  127.   Centre "VERSION 1.78" : Print : Print : Pen 3
  128.   Centre "WRITTEN BY C. HODGES" : Print : Print 
  129.   Centre "IN 1992!" : Print : Print : Print : Pen 1
  130.   Print "THE REQUIREMENTS: - A COPY OF FIREPOWER"
  131.   Print "                  - AT LEAST 1 MB MEMORY";
  132.   Print "                  - AND THIS HERE." : Print : Print : Print : Print 
  133.   Print "ARE YOU READY TO GO ON?" : Print 
  134.   Print "IF YOU ARE PRESS MOUSE BUTTON"
  135.   Print "TO BEGIN WITH THE MENU BAR...";
  136.   Fade 2,0,$FFF,$FF0,$F0
  137.   Repeat : Until Mouse Key=0
  138.   Repeat : Until Mouse Key
  139.   Fade 2 : Wait 32
  140.   Unpack 7 To 0
  141.   Screen Hide 0
  142.   Screen Open 1,320,256,16,0
  143.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls 0
  144.   Screen Display 1,,121,,
  145.   Get Palette 0
  146.   Screen 0 : Screen Display 0,,40,,72
  147.   For A=0 To 15 : Colour A,0 : Next 
  148.   Screen Show 0
  149.   Fade 2 To 1 : Wait 32
  150.   Screen 1 : For A=0 To 15 : Colour A,0 : Next 
  151.   Pen 5 : Centre "THE BUTTONS" : Print 
  152.   Centre "-----------" : Print : Print : Pen 1
  153.   Print "YOU CAN CLICK AT ANY BUTTON WITH ";Pen$(3);"LEFT"
  154.   Print "MOUSE BUTTON";Pen$(1);" OR ";Pen$(4);"RIGHT MOUSE BUTTON";Pen$(1);"."
  155.   Print : Print "NOW I'LL EXPLANE ALL BUTTONS (L & R)..." : Print 
  156.   Print Pen$(2);"LOAD MAP ";Pen$(3);"-LOAD A SAVED MAP."
  157.   Print "         ";Pen$(4);"-LOAD THE MAP LAST SAVED/LOADED"
  158.   Print Pen$(2);"SAVE MAP ";Pen$(3);"-SAVE A CREATED MAP."
  159.   Print "         ";Pen$(4);"-SAVE AS THE MAP LAST LOADED." : Print 
  160.   Print Pen$(2);"CLEAR MAP";Pen$(3);"-NO EFFECT."
  161.   Print "         ";Pen$(4);"-CLEAR THE MAP." : Print 
  162.   Print Pen$(2);"QUIT OUT ";Pen$(3);"-PRESS 3 TIMES TO QUIT"
  163.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON" : Print : Print 
  164.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  165.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  166.   Repeat : Until Mouse Key=0
  167.   Repeat : Until Mouse Key
  168.   Fade 2 : Wait 32 : Cls 
  169.   Print Pen$(2);"SET TREES";Pen$(3);"-SET TREES ON EMPTY FIELDS."
  170.   Print "         ";Pen$(4);"-REMOVE ALL TREES." : Print 
  171.   Print Pen$(2);"SET ROADS";Pen$(3);"-SELECTS ROAD-CHARSET,SEE LATER";
  172.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  173.   Print Pen$(2);"SET WALLS";Pen$(3);"-SELECTS WALL-CHARSET."
  174.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  175.   Print Pen$(2);"SET BUILD";Pen$(3);"-SELECTS BUILDING-CHARSET."
  176.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  177.   Print Pen$(2);"FLIP COL.";Pen$(3);"-FLIP BROWN AND GREEN PLAYER"
  178.   Print "         ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  179.   Print Pen$(2);"VIEW MAP ";Pen$(3);"-SCROLL THROUGH THE MAP."
  180.   Print "         ";Pen$(4);"-VIEW THE HOLE MAP." : Print 
  181.   Print Pen$(2);"? BUTTON ";Pen$(3);"-ABOUT THIS EDITOR."
  182.   Print "         ";Pen$(4);"-GIVES AN INFO OF THE MAP." : Print 
  183.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  184.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  185.   Repeat : Until Mouse Key=0
  186.   Repeat : Until Mouse Key
  187.   Fade 2 : Wait 32 : Cls 
  188.   Print Pen$(2);"ARROW TO THE LEFT ";Pen$(3);"-PREVOUS CHAR."
  189.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  190.   Print Pen$(2);"ARROW TO THE RIGHT";Pen$(3);"-NEXT CHAR."
  191.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  192.   Print Pen$(2);"GREEN BUTTON      ";Pen$(3);"-SELECT GREEN CHARSET.";
  193.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  194.   Print Pen$(2);"BROWN BUTTON      ";Pen$(3);"-SELECT BROWN CHARSET.";
  195.   Print "                  ";Pen$(4);"-SAME AS LEFT BUTTON." : Print 
  196.   Print Pen$(2);"CURSOR BUTTONS    ";Pen$(3);"-SLOW SCROLLING."
  197.   Print "                  ";Pen$(4);"-FASTER SCROLLING."
  198.   Print "                  ";Pen$(5);"-FASTEST SCROLLING." : Print 
  199.   Print Pen$(1);"IF YOU PRESS THE VIEW MAP BUTTON WITH"
  200.   Print "THE RIGHT MOUSE BUTTON AND THEN PRESS"
  201.   Print "IT AGAIN YOU WILL SEE THE LITTLE MAP"
  202.   Print "IN THE CORNER ZOOMED IN." : Print 
  203.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  204.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  205.   Repeat : Until Mouse Key=0
  206.   Repeat : Until Mouse Key
  207.   Fade 2 : Wait 32 : Cls 
  208.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  209.   Unpack 8 To 0
  210.   Screen Hide 0
  211.   Screen Display 0,128,40,,138
  212.   Screen 1
  213.   Screen Display 1,,179,,
  214.   Get Palette 0
  215.   Screen 0 : For A=0 To 15 : Colour A,0 : Next 
  216.   Screen Show 0
  217.   Fade 2 To 1 : Wait 32
  218.   Screen 1
  219.   For A=0 To 15 : Colour A,0 : Next 
  220.   Pen 5 : Centre "THE FILE SELECTOR" : Print 
  221.   Centre "-----------------" : Print : Print : Pen 1
  222.   Print "AS YOU CAN SEE THERE ARE THREE BUTTONS"
  223.   Print "AT THE TOP OF THE REQUESTER: THE FIRST"
  224.   Print "SELECTS THE ONE PLAYER LEVEL MAPS, THE"
  225.   Print "SECOND THE TWO PLAYER MAPS AND THE"
  226.   Print "THIRD THE MODEM MAPS. IF YOUR DISK IS"
  227.   Print "FULL YOU CAN LOAD OR SAVE A MAP ONTO AN"
  228.   Print "EXTRA DISK BY CLICKING ON EXTRA!"
  229.   Print "IF YOU HAVE PRESSED ONE OF THE FOUR"
  230.   Print "BUTTONS, THE DIRECTORY WILL BE READ UP!"
  231.   Print : Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  232.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  233.   Repeat : Until Mouse Key=0
  234.   Repeat : Until Mouse Key
  235.   Fade 2 : Wait 32 : Cls 
  236.   Pen 1 : Print "THEN YOU CAN SELECT A MAP BY CLICKING ON";
  237.   Print "IT OR BROWSE THROUGH THE MAPS WITH THE"
  238.   Print "ARROW BUTTONS OR USING THE SLIDER BAR." : Print 
  239.   Print "THERE ARE THREE TYPES OF MAPS:"
  240.   Print "- ";Pen$(2);"GAME MAPS";Pen$(1);" : THESE ARE ACTUALLY USED BY";
  241.   Print "              THE GAME!"
  242.   Print "- ";Pen$(4);"SPARE MAPS";Pen$(1);": THESE ARE NOT USED BUT CAN";
  243.   Print "              BE SWAPPED AND DELETED!"
  244.   Print "- ";Pen$(3);"NO MAPS";Pen$(1);"   : THESE ARE NOT EXISTING BUT";
  245.   Print "              SELECTABLE FOR SAVING!"
  246.   Print : Print : Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  247.   Fade 2,0,$FFF,$7F7,$F,$FB3,$F0F,$88F
  248.   Repeat : Until Mouse Key=0
  249.   Repeat : Until Mouse Key
  250.   Fade 2 : Wait 32 : Cls 
  251.   Pen 1 : Print "AT THE BOTTOM THERE ARE SEVERAL BUTTONS:";
  252.   Print "- ";Pen$(2);"LOAD";Pen$(1);"/";Pen$(4);"SAVE";Pen$(1);": LOADS/SAVES THE SELECTED"
  253.   Print "             GAME OR SPARE MAP."
  254.   Print "- ";Pen$(5);"DELETE";Pen$(1);"   : DELETES THE SELECTED SPARE"
  255.   Print "             MAP THE FROM DISK."
  256.   Print "- ";Pen$(4);"SWAP";Pen$(1);"     : SWAPS THE SELECTED MAP"
  257.   Print "             AGAINST ANOTHER."
  258.   Print "- ";Pen$(3);"SHOW";Pen$(1);"     : DISPLAYS THE SELECTED GAME"
  259.   Print "             OR SPARE MAP."
  260.   Print "- ";Pen$(3);"SHOW ALL";Pen$(1);" : DISPLAYS ALL MAPS IN THE"
  261.   Print "             ACTUAL DIRECTORY."
  262.   Print "- ";Pen$(5);"CANCEL";Pen$(1);"   : ABORTS LOAD/SAVE REQUESTER.";
  263.   Print "- X        : ABORTS SWAPPING."
  264.   Print : Pen 6 : Centre "PRESS MOUSE BUTTON..."
  265.   Fade 2,0,$FFF,$7F7,$F,$FB3,$C00,$88F
  266.   Repeat : Until Mouse Key=0
  267.   Repeat : Until Mouse Key
  268.   Fade 2 : Wait 32 : Cls 
  269.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  270.   Screen Display 1,128,40,320,256
  271.   Pen 5 : Centre "HOW TO CREATE A MAP" : Print 
  272.   Centre "--------------------" : Print : Print 
  273.   Print Pen$(1);"FIRST YOU HAVE TO CLICK ON SET ROADS,"
  274.   Print "SET WALLS OR SET BUILDINGS: A CHAR"
  275.   Print "APPEARS BETWEEN THE TWO GREEN ARROWS."
  276.   Print "NOW YOU CAN CLICK USING THE LEFT MOUSE"
  277.   Print "BUTTON AT THE SCREEN BELOW THE MENU"
  278.   Print "AND THE CHAR WILL BE COPIED TO IT."
  279.   Print "THE RIGHT BUTTON REMOVES IT."
  280.   Print "THE CHAR CAN BE GREEN OR BROWN, UNLESS"
  281.   Print "YOU HAVE CLICKED ON SET ROADS."
  282.   Print "TO CHANGE THE COLOR PRESS THE GREEN"
  283.   Print "OR BROWN BUTTON."
  284.   Print "YOU CAN ONLY SEE A SMALL PART OF THE"
  285.   Print "MAP AT A TIME, BUT YOU CAN SCROLL"
  286.   Print "WITH THE CURSOR BUTTONS. IF YOU GO"
  287.   Print "TO THE BORDER OF THE SCREEN, IT"
  288.   Print "WILL SCROLL AUTOMATICALLY."
  289.   Print : Print : Print : Print : Print 
  290.   Pen 6 : Centre "PRESS MOUSE BUTTON..."
  291.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  292.   Repeat : Until Mouse Key=0
  293.   Repeat : Until Mouse Key
  294.   Fade 2 : Wait 32 : Cls 
  295.   Pen 5 : Centre "REMEMBER" : Print 
  296.   Centre "--------" : Print : Print 
  297.   Print Pen$(1);"YOU MUST HAVE ONE OR MORE DEPOTS FOR"
  298.   Print "EACH PLAYER OR FIREPOWER WILL CRASH."
  299.   Print "AS WITH DEPOTS A STARTPOINT MUST EXIST!"
  300.   Print "IF YOU MAKE A MAP AGAINST THE COMPUTER,"
  301.   Print "REMEMBER THE COMPUTER IS GREEN AND YOU"
  302.   Print "DON'T NEED A STARTPOINT FOR HIM OR A"
  303.   Print "DEPOT FOR THE BROWN PLAYER."
  304.   Print "THE MAP IS ROUND, SO IF YOU GO OUT OF"
  305.   Print "THE LEFT EDGE YOU WILL COME OUT AT THE"
  306.   Print "RIGHT EDGE AND VICE VERSA." : Print 
  307.   Print "THIS EDITOR IS SHAREWARE SO IF YOU USE"
  308.   Print "IT GIVE ME SOME MONEY..." : Print : Print 
  309.   Pen 3 : Centre "SPREAD THE DISK, AND NOT THE WORD!" : Print : Print 
  310.   Print : Pen 4 : Centre "HAVE FUN CREATING YOUR OWN MAPS!"
  311.   Print : Print : Print 
  312.   Pen 6 : Centre "PRESS MOUSE BUTTON TO START!"
  313.   Fade 2,0,$FFF,$FF0,$F0,$F00,$F0F,$88F
  314.   Repeat : Until Mouse Key=0
  315.   Repeat : Until Mouse Key
  316.   Fade 2 : Wait 32 : Cls 
  317.   Screen Close 1
  318.   Screen 0 : Fade 2 : Wait 32 : Screen Close 0
  319. Return 
  320. TILEINFO:
  321.   BXA=BX : BYA=BY : C=U(Peek(Start(6)+BY+BX*64)) : G=1 : If C>14 Then G=7
  322.   If C>31 Then C=C-17 : G=5
  323.   T[-G,I$(C)]
  324. Return 
  325. MENUBUTTON:
  326.   If B=1 Then Gosub LADEMAP
  327.   If B=2 Then Gosub SPEICHEREMAP
  328.   If B=3 Then Gosub LOESCHEMAP
  329.   If B=4 Then Gosub QUIT Else : If QUIT>0 Then QUIT=0 : T[0,""]
  330.   If B=5 Then Gosub SETTREES
  331.   If B=6 Then ZX=0 : Z=1 : TYPE=1 : HOE=14 : Gosub ZEIGEZEICHEN
  332.   If B=7 Then ZX=0 : Z=1 : TYPE=2 : HOE=9 : Gosub ZEIGEZEICHEN
  333.   If B=8 Then ZX=0 : Z=1 : TYPE=3 : HOE=8 : Gosub ZEIGEZEICHEN
  334.   If B=9 Then Gosub FLIP
  335.   If B=10 Then Gosub ZEIGEMAP : M=0
  336.   If B=11 Then Gosub INFO : M=0
  337.   If B=12 Then ZX=1 : Add Z,-1,1 To HOE : Gosub ZEIGEZEICHEN
  338.   If B=13 Then ZX=0 : Add Z,1,1 To HOE : Gosub ZEIGEZEICHEN
  339.   If B=14 and E=0 and TYPE>1 Then E=1 : Gosub ZEIGEZEICHEN
  340.   If B=16 and E=1 and TYPE>1 Then E=0 : Gosub ZEIGEZEICHEN
  341. Return 
  342. FLIP:
  343.   CM=3 : Gosub CM
  344.   T[-12,"PLEASE WAIT"]
  345.   Screen 2
  346.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64))
  347.     D=C : If C>14 and C<32 Then D=D+17
  348.     If C>31 Then D=D-17
  349.     Poke Start(6)+Y+X*64,S(D) : If D>14 Then Put Cblock D+1,X*8,Y*8
  350.   Next : Next 
  351.   Screen 1
  352.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : If C>14 Then Plot 252+X,4+Y,C(C)
  353.   Next : Next 
  354.   T[0,""] : Gosub BLITZ
  355.   CM=2 : Gosub CM
  356. Return 
  357. ABOUT:
  358.   XX=X Sprite(2) : YY=Y Sprite(2) : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  359.   Amal Freeze 
  360.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  361.   Screen Open 3,320,256,4,0
  362.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls : Hide 
  363.   Palette 0,0,0,0
  364.   Home : Pen 2 : Print : Centre "The Fire-Power-Level-Map-Editor de luxe"
  365.   Print : Print : Centre "Version 1.78"
  366.   Pen 1 : Print : Print : Centre "Written by C. Hodges"
  367.   Print : Print : Centre "Using AMOS Version 1.2"
  368.   Print : Print : Centre "Graphics by C. Hodges"
  369.   Print : Print : Centre "Block-Graphics by P. Hodges"
  370.   Pen 2 : Print : Print : Print : Centre "This is Share Ware!!!"
  371.   Pen 1 : Print : Print : Centre "After 3 times saving a map"
  372.   Print : Centre "you must realize that you"
  373.   Print : Centre "need this tool and so you have"
  374.   Print : Centre "to send me 15 DM to get the newest"
  375.   Print : Centre "update and pay for this great tool!"
  376.   Pen 3 : Print : Print : Centre "My address:  "
  377.   Print : Print : Centre "Chris Hodges   "
  378.   Print : Centre "Kennedystr. 8  "
  379.   Print : Centre "8039 Puchheim  "
  380.   Print : Centre "West Germany!  "
  381.   Print : Print : Centre "Tel. 089/804758"
  382.   Fade 1,0,$FFF,$F00,$F0
  383.   While Mouse Key=0 : Wend 
  384.   Fade 1 : Wait 18
  385.   Pen 1 : Cls : Print : Centre "Version 2.0 will have new features like:"
  386.   Pen 3 : Print : Print : Centre "- Automatic Road-and Wall settings"
  387.   Print : Centre "  (like SimCity(TM))              "
  388.   Print : Print : Centre "- Block functions (Cut/Copy/Paste)"
  389.   Print : Print : Centre "- Flip and Rotate functions       "
  390.   Print : Print : Centre "- A Very Good Hardcopy Routine    "
  391.   Print : Print : Centre "- Bigger Block-Graphics (12*12)   "
  392.   Pen 1 : Print : Print : Print : Print : Centre "If you have any suggestions to"
  393.   Print : Centre "later Versions or questions"
  394.   Print : Centre "write to me or telephone me!"
  395.   Pen 2 : Print : Print : Print : Print : Centre "Have fun and create your own maps!!!"
  396.   Fade 1,0,$FFF,$F00,$F0
  397.   While Mouse Key=0 : Wend 
  398.   Fade 1 : Wait 18
  399.   Screen Close 3
  400.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  401.   Sprite 2,XX,YY, : Amal On : Show 
  402.   Gosub RESETCOLOR
  403. Return 
  404. INFO:
  405.   If M=1 Then Goto ABOUT
  406.   T[-12,"PLEASE WAIT"]
  407.   CM=3 : Gosub CM
  408.   F=0 : T=0 : R=0
  409.   For A=0 To 10 : DT(A,0)=0 : DT(A,1)=0 : Next 
  410.   For A=0 To 4095 : C=U(Peek(A+Start(6))) : If C>31 Then D=0 : C=C-17 Else D=1
  411.     Gosub LOC : Next 
  412.   T[0,""]
  413.   XX=X Sprite(2) : YY=Y Sprite(2) : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  414.   Amal Freeze 
  415.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  416.   Screen Open 3,320,200,4,0
  417.   Curs Off : Flash Off : Paper 0 : Pen 1 : Cls : Hide 
  418.   Palette 0,0,0,0
  419.   Home : Print : Centre "Info of current Playfield"
  420.   Print : Print 
  421.   Print "Width and height: 64*64 Blocks"
  422.   Print "Looking at      :";OX/8;" /";OY/8;" -";OX/8+39;" /";OY/8+21
  423.   Print 
  424.   Print "Free :";F
  425.   Print "Roads:";R
  426.   Print "Trees:";T
  427.   Pen 2 : D=0 : Locate 0,11 : Print "Green Player" : Gosub INFOPLAYER
  428.   Pen 3 : D=1 : Locate 20,11 : Print "Brown Player" : Gosub INFOPLAYER
  429.   Fade 1,0,$FFF,$F0,$F80
  430.   While Mouse Key=0 : Wend 
  431.   Fade 1 : Wait 18 : Screen Close 3
  432.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  433.   Sprite 2,XX,YY, : Amal On : Show 
  434.   Gosub RESETCOLOR
  435.   CM=2 : Gosub CM
  436. Return 
  437. LOC:
  438.   If C=0 Then Inc F : Return 
  439.   If C=1 or C=2 or C=3 Then Inc T : Return 
  440.   If C>3 and C<15 Then Inc R : Return 
  441.   If C=15 Then Inc DT(0,D) : Return 
  442.   If C=16 or C=17 Then Inc DT(1,D) : Return 
  443.   If C>17 and C<24 Then Inc DT(2,D) : Return 
  444.   If C=24 or C=25 or C=27 Then Inc DT(3,D) : Return 
  445.   If C=26 Then Inc DT(4,D) : Return 
  446.   If C>27 Then Inc DT(C-23,D)
  447. Return 
  448. INFOPLAYER:
  449.   Locate D*20,13 : Print "Walls   :";DT(1,D)
  450.   Locate D*20,14 : Print "Cannons :";DT(2,D)
  451.   Locate D*20,15 : Print "Gates   :";DT(0,D)
  452.   Locate D*20,16 : Print "Bunker  :";DT(3,D)
  453.   Locate D*20,17 : Print "Jails   :";DT(4,D)
  454.   Locate D*20,18 : Print "Fuels   :";DT(5,D)
  455.   Locate D*20,19 : Print "Lazarets:";DT(6,D)
  456.   Locate D*20,20 : Print "Depots  :";DT(8,D);
  457.   If DT(8,D)=0 Then Pen 1 : Print "-Warning" : Pen 2+D Else Print 
  458.   Locate D*20,21 : Print "Starts  :";DT(7,D);
  459.   If DT(7,D)=0 Then Pen 1 : Print "-Warning" : Pen 2+D Else Print 
  460.   Locate D*20,22 : Print "--------------"
  461.   R=0 : For A=0 To 8 : R=R+DT(A,D) : Next 
  462.   Locate D*20,23 : Print "Total   :";R
  463. Return 
  464. LOESCHEN:
  465.   BXA=-1 : Poke Start(6)+BY+BX*64,0 : Plot 252+BX,4+BY,C(0) : Screen Copy 0,0,0,8,8 To 2,BX*8,BY*8
  466. Return 
  467. SETBUILD:
  468.   C=Z(TYPE,Z,E) : Poke Start(6)+BY+BX*64,S(C) : Plot 252+BX,4+BY,C(C)
  469.   If C>39 Then YY=8 : C=C-40 Else YY=0
  470.   BXA=-1 : Screen Copy 0,C*8,YY,C*8+8,YY+8 To 2,BX*8,BY*8
  471. Return 
  472. BIGMAP:
  473.   Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  474.   Screen Open 3,320,256,16,0
  475.   Curs Off : Flash Off : Cls 8 : Hide 
  476.   For A=0 To 15 : Colour A,0 : Next 
  477.   Fade 1 To 0 : Zoom 2,0,0,511,511 To 3,0,0,320,256 : D=0
  478.   Repeat 
  479.     If Mouse Key=2 and D=0 Then Zoom 1,252,4,316,68 To 3,0,0,320,256 : D=1
  480.     If Mouse Key=2 and D=1 Then Zoom 2,0,0,511,511 To 3,0,0,320,256 : D=0
  481.   Until Mouse Key=1
  482.   Fade 1 : Wait 18 : Screen Close 3
  483.   Screen 1 : Fade 1 To 0 : Wait 18 : Screen 2 : Fade 1 To 0 : Wait 18
  484.   Sprite 2,XX,YY, : Amal On : Show 
  485.   Gosub RESETCOLOR
  486. Return 
  487. RESETCOLOR:
  488.   Screen 1 : Colour 21,$121 : Colour 22,$252 : Colour 23,$575 : Colour 25,0
  489.   Colour 17,0 : Colour 18,0 : Colour 19,$FFF
  490. Return 
  491. ZEIGEMAP:
  492.   G=0 : Amal Freeze : XX=X Sprite(2) : YY=Y Sprite(2)
  493.   Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  494.   If M=2 Then Goto BIGMAP
  495.   For A=123 To 41 Step -2
  496.     Wait Vbl : Screen Display 2,128,A,320,172+G : Screen Offset 2,OX,OY
  497.     G=G+2 : If G+OY>340 Then OY=OY-2
  498.   Next 
  499.   G=G-2 : OY=OY+2
  500.   Repeat 
  501.     X=X Screen(1,X Mouse) : Y=Y Screen(1,Y Mouse)
  502.     If X<80 Then OX=Max(OX-2,0)
  503.     If X>240 Then OX=Min(OX+2,192)
  504.     If Y<80 Then OY=Max(OY-2,0)
  505.     If Y>165 Then OY=Min(OY+2,258)
  506.     If X<40 Then OX=Max(OX-2,0)
  507.     If X>280 Then OX=Min(OX+2,192)
  508.     If Y<40 Then OY=Max(OY-2,0)
  509.     If Y>205 Then OY=Min(OY+2,258)
  510.     Wait Vbl : Screen Offset 2,OX,OY
  511.   Until Mouse Key<>0
  512.   For A=41 To 123 Step 2
  513.     Wait Vbl : Screen Display 2,128,A,320,172+G
  514.     If G>0 Then G=G-2
  515.   Next 
  516.   Sprite 2,XX,YY,
  517.   Amal On 
  518. Return 
  519. CM:
  520.   If CM=CMA Then Return 
  521.   If CM<>6 Then Change Mouse CM
  522.   Screen 1 : If CM=2 Then Colour 17,0 : Colour 18,0 : Colour 19,$FFF
  523.   If CM=3 Then Colour 17,$888 : Colour 18,$555 : Colour 19,$FFF : Amal Freeze 1
  524.   If CM=3 Then Sprite 1,0,0, : Screen 2 : Colour 17,$888 : Colour 18,$555 : Colour 19,$FFF
  525.   If CM=6
  526.     Colour 17,$666 : Colour 18,$666
  527.     Screen 2 : Colour 17,$FFF : Colour 18,$999 : Colour 19,$555
  528.   End If 
  529.   If CMA=3 Then Amal On 1
  530.   CMA=CM : Screen 1
  531. Return 
  532. ZEIGEZEICHEN:
  533.   C=Z(TYPE,Z,E)
  534.   D=C : G=1 : If C>14 Then G=7
  535.   If C>31 Then D=D-17 : G=5
  536.   T[-G,I$(D)]
  537.   If C>39 Then YY=8 : C=C-40 Else YY=0
  538.   For A=0 To 7
  539.     Scroll ZX+1 : Wait Vbl 
  540.     If ZX=0 Then Screen Copy 0,C*8+A,YY,C*8+A+1,YY+8 To 1,226,18
  541.     If ZX=1 Then Screen Copy 0,C*8+7-A,YY,C*8+8-A,YY+8 To 1,219,18
  542.   Next 
  543. Return 
  544. LADEMAP:
  545.   If M=1 Then T$="LOAD" : Gosub FREQ
  546.   If F$="" Then Wait Vbl : Gosub BLITZ : T[-12,"FILE ERROR!"] : Return 
  547.   CM=3 : Gosub CM
  548.   Bload F$,6
  549.   Ink 8 : Bar 252,4 To 315,67
  550.   T[-12,"PLEASE WAIT"]
  551.   Screen 2
  552.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : Put Cblock C+1,X*8,Y*8 : Next : Next 
  553.   Screen 1
  554.   For Y=0 To 63 : For X=0 To 63 : C=U(Peek(Start(6)+Y+X*64)) : If C>3 Then Plot 252+X,4+Y,C(C)
  555.   Next : Next 
  556.   BXA=-1 : CM=2 : Gosub CM
  557.   T[0,""]
  558.   Gosub BLITZ
  559. Return 
  560. SPEICHEREMAP:
  561.   If M=1 Then T$="SAVE" : Gosub FREQ
  562.   If F$="" Then Return 
  563.   CM=3 : Gosub CM
  564.   ERN=0 : Bsave F$,Start(6) To Start(6)+4096 : If ERN Then T[-12,"SAVE ERROR!"]
  565.   CM=2 : Gosub CM
  566.   Gosub BLITZ
  567. Return 
  568. LOESCHEMAP:
  569.   If M=1 Then T[-12,"PRESS RIGHT"] : Return 
  570.   CM=3 : Gosub CM
  571.   T[-12,"PLEASE WAIT"]
  572.   For A=0 To 1023 : Loke Start(6)+A*4,0 : Next 
  573.   Ink 8 : Bar 252,4 To 315,67
  574.   Screen 2 : Cls 8 : Screen 1
  575.   CM=2 : Gosub CM
  576.   T[0,""]
  577.   Gosub BLITZ
  578. Return 
  579. QUIT:
  580.   If QUIT<2 Then T[-12,"SURE?"] : Inc QUIT : Return 
  581.   T[-12,"BYE..."]
  582.   Pop : Screen 1 : Fade 1 : Wait 18 : Screen 2 : Fade 1 : Wait 18
  583.   Amal Off : Sprite Off 
  584.   Screen Close 0
  585.   Screen Close 1
  586.   Screen Close 2
  587.   Dir$=OLDDIR$
  588. End 
  589. DELTREES:
  590.   For Y=0 To 63 : For X=0 To 63
  591.     L=X*64+Y+Start(6) : If Peek(L)<5 and Peek(L)<>0 Then Poke L,0 : Put Cblock 1,X*8,Y*8
  592.   Next : Next 
  593. Return 
  594. FILTREES:
  595.   For Y=0 To 63 : For X=0 To 63
  596.     If Peek(X*64+Y+Start(6))=0 Then C=Rnd(2)+1 : Poke X*64+Y+Start(6),S(C) : Put Cblock C+1,X*8,Y*8
  597.   Next : Next 
  598. Return 
  599. SETTREES:
  600.   CM=3 : Gosub CM
  601.   T[-12,"PLEASE WAIT"]
  602.   Screen 2 : If M=2 Then Gosub DELTREES Else Gosub FILTREES
  603.   Screen 1 : CM=2 : Gosub CM
  604.   T[0,""]
  605.   Gosub BLITZ
  606. Return 
  607. BLITZ:
  608.   Colour 0,$FFF : Boom : Fade 2,0
  609. Return 
  610. FREQ:
  611.   XX=X Sprite(2) : YY=Y Sprite(2) : Amal Freeze 
  612.   Wait Vbl : Sprite 2,0,0, : Sprite 3,0,0, : Sprite 4,0,0,
  613.   Sprite Update : Wait Vbl : Wait Vbl 
  614.   FILREQ[Abs(T$="SAVE")]
  615.   F$=Param$
  616.   If F$<>"" Then If(Exist(F$)=0) and(T$="LOAD") Then F$=""
  617.   Sprite 2,XX,YY, : Amal On 
  618.   Screen 1
  619.   Limit Mouse 128,50 To 447,295
  620. Return 
  621. BUT:
  622.   B=0
  623.   For A=1 To 19
  624.     If X>B(A,0) and Y>B(A,1) and X<B(A,2) and Y<B(A,3) Then B=A : Exit 
  625.   Next 
  626.   If B=0 Then Return 
  627.   Shoot 
  628.   C1=Point(B(B,2),B(B,3))
  629.   C2=Point(B(B,0),B(B,1))
  630.   Ink C1 : Draw B(B,0),B(B,3)-1 To B(B,0),B(B,1)
  631.   Draw To B(B,2)-1,B(B,1)
  632.   Ink C2 : Draw B(B,0)+1,B(B,3) To B(B,2),B(B,3)
  633.   Draw To B(B,2),B(B,1)+1
  634.   If B=15 or B=17 or B=18 or B=19 Then Gosub MOVE
  635.   Repeat : Until Mouse Key=0
  636.   Ink C2 : Draw B(B,0),B(B,3)-1 To B(B,0),B(B,1)
  637.   Draw To B(B,2)-1,B(B,1)
  638.   Ink C1 : Draw B(B,0)+1,B(B,3) To B(B,2),B(B,3)
  639.   Draw To B(B,2),B(B,1)+1
  640. Return 
  641. MOVE:
  642.   Repeat 
  643.     M=Mouse Key
  644.     If B=17 Then OX=Max(Min(OX-M*4,192),0)
  645.     If B=19 Then OX=Max(Min(OX+M*4,192),0)
  646.     If B=15 Then OY=Max(Min(OY-M*4,340),0)
  647.     If B=18 Then OY=Max(Min(OY+M*4,340),0)
  648.     Wait Vbl : Screen Offset 2,OX,OY
  649.   Until M=0
  650. Return 
  651. ' Buttons  
  652. DATTABLE:
  653. Data 2,21,76,30
  654. Data 2,31,76,40
  655. Data 2,41,76,50
  656. Data 2,51,76,61
  657. '
  658. Data 77,21,151,30
  659. Data 77,31,151,40
  660. Data 77,41,151,50
  661. Data 77,51,183,61
  662. '
  663. Data 152,21,197,30
  664. Data 152,31,197,50
  665. Data 184,51,197,61
  666. '
  667. Data 199,14,214,29
  668. 'Data 215,14,230,29
  669. Data 231,14,246,29
  670. Data 199,30,214,45
  671. Data 215,30,230,45
  672. Data 231,30,246,45
  673. Data 199,46,214,61
  674. Data 215,46,230,61
  675. Data 231,46,246,61
  676. ' Table for Convertor
  677. '    0 1 2 3 4 5  6 7  8 910 1112 13 141516    
  678. Data 0,0,1,2,3,10,9,11,7,0,6,12,8,13,14,4,5
  679. Data 25,24,26,30,0,27,0,29,28,0,23,0,42,41
  680. Data 43,47,0,44,0,46,45,0,40,0,18,17,19,15
  681. Data 0,0,16,20,0
  682. Data 21,0,0,0,0,0,0,0,0,0,0,0,0,0,35,34,36,32
  683. Data 0,0,33,37,0,38,0,0
  684. Data 0,0,0,0,0,0,0,0,0,22,0,39,0,31,0,0,48
  685. ' Color table for little map 
  686. Data 8,8,8,8,3,3,3,3,3,3,3,3,3,3,3
  687. Data 2,2,2,10,10,10,10,10,10,7,7,7,7,7,7,9,9
  688. Data 2,2,2,6,6,6,6,6,6,5,5,5,5,5,5,4,4
  689. ' Char table 
  690. Data 14,4,5,6,7,8,9,10,11,12,13,14,1,2,3
  691. Data 4,5,6,7,8,9,10,11,12,13,14,1,2,3
  692. Data 9,16,17,18,19,20,21,22,23,15
  693. Data 33,34,35,36,37,38,39,40,32
  694. Data 8,24,25,26,27,28,29,30,31,41,42,43,44,45,46,47,48
  695. ' Names of Tiles 
  696. Data "Empty","Big Tree","Small Tree","Medium Tree","- Road","| Road"
  697. Data "Crossroad","Crossroad","Crossroad","Crossroad","Curve","Curve"
  698. Data "Curve","Curve","Heli base","Gate","| Wall","- Wall","Cannon"
  699. Data "Cannon","Cannon","Cannon","Cannon","Cannon","Bunker","Bunker"
  700. Data "Jail","Bunker","Fuel","Lazared","Start Point","Flag Depot"
  701. '
  702. Procedure T[C,T$]
  703.   Ink 2 : Bar 154,63 To 245,70 : X=0
  704.   If C<0 Then X=46-Len(T$)*4
  705.   Ink Abs(C),2 : Text 154+X,69,T$
  706. End Proc
  707. Procedure FILREQ[SAV]
  708.   On Error Proc HANDLER
  709.   Hide : Unpack 8 To 3 : Curs Off 
  710.   Screen Display 3,128,-120,320,138
  711.   Colour 17,0 : Colour 19,$FFF : Colour 18,0
  712.   Screen Copy 3,133,164,141,172 To 3,0,0
  713.   If SAV Then Screen Copy 3,133,138,169,150 To 3,3,122
  714.   Dim B(15,4),VERZ$(4),INS$(4),MAPGU(4),FILES(32),NOM(32),C(48)
  715.   Restore 
  716.   For A=1 To 15
  717.     Read B(A,0),B(A,1),B(A,2),B(A,3)
  718.   Next 
  719.   For A=0 To 48
  720.     Read C(A)
  721.   Next 
  722.   VERZ$(1)="FIREPOWER:MapP1" : INS$(1)="PLEASE INSERT FIREPOWER IN ANY DRIVE!" : MAPGU(1)=5
  723.   VERZ$(2)="FIREPOWER:MapP2" : INS$(2)=INS$(1) : MAPGU(2)=5
  724.   VERZ$(3)="FIREPOWER:MapP3" : INS$(3)=INS$(1) : MAPGU(3)=1
  725.   VERZ$(4)="DF0:" : INS$(4)="PLEASE INSERT A MAP-DISK IN DF0:" : MAPGU(4)=0
  726.   A=VERZ : Gosub PRESS
  727.   For A=-120 To 40 Step 5
  728.     Screen Display 3,128,A,320,138 : Wait Vbl 
  729.   Next 
  730.   Screen Hide 1
  731.   Limit Mouse 128,40 To 447,177 : Show 
  732.   Gosub REDDIR
  733.   Do 
  734.     BUT=0 : X=X Mouse-128 : Y=Y Screen(3,Y Mouse) : M=Mouse Key
  735.     If M=1 Then Gosub CHKBUTTON
  736.     If BUT and SWP=0 Then T$="OK" : Gosub STATUS
  737.     If(BUT>0 or M=2) and SWP Then SWP=0 : A=10 : Gosub REALIZE : T$="SWAPPING ABORTED!" : Gosub STATUS
  738.     If BUT=0 and M and X>7 and X<300 and Y>31 and Y<96 Then Gosub CHGFIL
  739.     If BUT and BUT<5 Then Gosub NEWDIR
  740.     If BUT=5 Then Gosub SLIDER
  741.     If BUT=8 and FILES(OLFI)<>0 Then Gosub SURE : If M=2 Then Exit 
  742.     If BUT=9 and FILES(OLFI)<OLFI Then T$="CAN'T DELETE PSEUDO MAP!" : Gosub STATUS : BUT=0
  743.     If BUT=9 and FILES(OLFI)<=MAPGU(VERZ) and OLFI>0 Then T$="CAN'T DELETE GAME MAP!" : Gosub STATUS : BUT=0
  744.     If BUT=10 and FILES(OLFI)<OLFI Then T$="CAN'T SWAP PSEUDO MAP!" : Gosub STATUS : BUT=0
  745.     If BUT=11 and FILES(OLFI)<OLFI Then T$="CAN'T SHOW PSEUDO MAP!" : Gosub STATUS : BUT=0
  746.     If BUT>7 and BUT<12 and OLFI=0 Then T$="NO MAP SELECTED!" : Gosub STATUS : BUT=0
  747.     If BUT=12 and OLFI=0 Then T$="DRAWER EMPTY!" : Gosub STATUS : BUT=0
  748.     If BUT=13 Then OLFI=0 : Exit 
  749.     If BUT=9 Then Gosub DELETE
  750.     If BUT=10 Then OLSW=OLFI : A=10 : Gosub PRESS : SWP=1 : T$="CLICK ON MAP TO BE SWAPPED!" : Gosub STATUS
  751.     If BUT=11 Then Gosub SHOMAP
  752.     If BUT=12 Then Gosub SHOALL
  753.     Repeat : Until Mouse Key=0 or BUT=0
  754.   Loop 
  755.   Hide 
  756.   Screen Show 1
  757.   For A=40 To -120 Step -5
  758.     Screen Display 3,128,A,320,138 : Wait Vbl 
  759.   Next 
  760.   Screen Close 3 : Show 
  761.   If OLFI>0 Then T$="T"+Str$(Abs(FILES(OLFI)))-" " Else T$=""
  762. Goto AUS
  763. SHOALL:
  764.   Hide 
  765.   Screen Open 4,320,296,8,0
  766.   Paper 0 : Curs Off : Flash Off : Cls 0
  767.   Get Palette 3 : Colour 6,$B61 : Colour 5,$60
  768.   For Y=290 To 40 Step -10
  769.     Screen Display 4,128,Y,320,256 : Wait Vbl 
  770.   Next 
  771.   Screen Hide 3
  772.   XX=8 : YY=8 : M=1
  773.   Erase 15 : Reserve As Chip Work 15,4096
  774.   For A=1 To Min(FIL,12)
  775.     If FILES(A)>0 Then Gosub SHOMAP2
  776.     If M Then Exit 
  777.   Next 
  778.   If M=0 Then Repeat : Until Mouse Key
  779.   Repeat : Until Mouse Key=0
  780.   Erase 15
  781.   Screen Show 3
  782.   For Y=40 To 290 Step 10
  783.     Screen Display 4,128,Y,320,256-(Y-40) : Wait Vbl 
  784.   Next 
  785.   Screen Close 4
  786.   Show 
  787. Return 
  788. SHOMAP2:
  789.   Ink 7 : Bar XX,YY To XX+63,YY+63
  790.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  791.   Bload "T"+Str$(FILES(A))-" ",15
  792.   Paper 0 : Pen 1 : Locate XX/8+2,YY/8+8 : Print Str$(FILES(A));
  793.   For Y=0 To 63
  794.     For X=0 To 63
  795.       M=Mouse Key
  796.       C=U(Peek(Start(15)+X*64+Y))
  797.       If C>3 Then Plot XX+X,YY+Y,C(C)
  798.       If M Then Exit 
  799.     Next 
  800.     If M Then Exit 
  801.   Next 
  802.   Add XX,80 : If XX=328 Then XX=8 : Add YY,80
  803. Return 
  804. SHOMAP:
  805.   Ink 7 : Bar 235,32 To 298,95
  806.   Erase 15 : Reserve As Chip Work 15,4096
  807.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  808.   Bload "T"+Str$(FILES(OLFI))-" ",15
  809.   For Y=0 To 63
  810.     For X=0 To 63
  811.       C=U(Peek(Start(15)+X*64+Y))
  812.       If C>3 Then Plot 235+X,32+Y,C(C)
  813.     Next 
  814.   Next 
  815.   Erase 15
  816. Return 
  817. SURE:
  818.   Bell 
  819.   Screen Copy 3,91,48,224,91 To 3,133,138
  820.   Screen Copy 3,0,138,133,181 To 3,91,48
  821.   Repeat : Until Mouse Key=0 : A=15
  822.   C=0
  823.   Repeat 
  824.     M=Mouse Key : Wait Vbl : Add C,1,0 To 49
  825.     If C=25 Then Gosub PRESS
  826.     If C=0 Then Gosub REALIZE
  827.   Until M>0
  828.   Gosub PRESS
  829.   Screen Copy 3,133,138,266,181 To 3,91,48
  830. Return 
  831. DELETE:
  832.   Gosub SURE : If M<>2 Then T$="FUNCTION ABORTED!" : Goto STATUS
  833.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  834.   ERN=0 : Kill "T"+Str$(OLFI)-" " : If ERN Then T$="UNABLE TO DELETE FILE!" : Goto STATUS
  835.   Gosub REDDIR
  836. Return 
  837. SLIDER:
  838.   If FIL<9 Then Return 
  839.   OO=O : YA=0
  840.   Repeat 
  841.     Repeat 
  842.       Y=Y Screen(3,Y Mouse)
  843.       YY=Min(Max(Y-G/2,48),79-G)
  844.       O=Min(((YY-48+G/2)*Max(FIL-7,1))/31,FIL-8)
  845.     Until YA<>YY or Mouse Key=0
  846.     YA=YY
  847.     Wait Vbl : Ink 2 : Bar 307,47 To 312,80
  848.     Ink 1 : Draw 307,YY To 311,YY : Draw 307,YY To 307,YY+G-1
  849.     Ink 3 : Draw 312,YY+G To 308,YY+G : Draw 312,YY+G To 312,YY+1
  850.     If OO<>O Then OO=O : Gosub UPDATFILES
  851.   Until Mouse Key=0
  852.   Gosub UPDATSLID
  853. Return 
  854. UPDATFILES:
  855.   For A=1+O To 8+O
  856.     Locate 1,3+A-O
  857.     Gosub MAPCOM
  858.   Next 
  859. Return 
  860. UPDATSLID:
  861.   Ink 2 : Bar 307,48 To 312,80
  862.   G=Max(31/Max(FIL-7,1),2) : YY=48+(O*31)/Max(FIL-7,1)
  863.   Ink 1 : Draw 307,YY To 311,YY : Draw 307,YY To 307,YY+G-1
  864.   Ink 3 : Draw 312,YY+G To 308,YY+G : Draw 312,YY+G To 312,YY+1
  865. Return 
  866. SCRUP:
  867.   If O<1 Then Return 
  868.   Screen Copy 3,8,32,220,88 To 3,8,40
  869.   Dec O : B=A : A=O+1
  870.   Locate 1,4
  871.   Gosub MAPCOM
  872.   Gosub UPDATSLID : A=B
  873. Return 
  874. SCRDOWN:
  875.   If FIL<O+9 Then Return 
  876.   Screen Copy 3,8,40,220,96 To 3,8,32
  877.   Inc O : B=A : A=O+8
  878.   Locate 1,11
  879.   Gosub MAPCOM
  880.   Gosub UPDATSLID : A=B
  881. Return 
  882. CHGFIL:
  883.   YY=Y/8-3 : If YY+O>FIL Then Return 
  884.   If YY+O=OLFI Then Return 
  885.   If OLFI>O+8 or OLFI<O Then OLFI=O+1
  886.   Locate 1,3+OLFI-O
  887.   A=OLFI : OLFI=0 : Gosub MAPCOM
  888.   OLFI=YY+O
  889.   Locate 1,3+OLFI-O
  890.   A=OLFI : Gosub MAPCOM
  891.   If SWP=1 Then Gosub XCHGFIL : SWP=0 : A=10 : Gosub REALIZE
  892. Return 
  893. XCHGFIL:
  894.   If FILES(OLFI)<0 Then T$="SWAPING ABORTED!" : Gosub STATUS : Return 
  895.   Gosub SURE
  896.   If M<>2 Then T$="FUNCTION ABORTED!" : Gosub STATUS : Return 
  897.   T$="SWAPPING! PLEASE WAIT!" : Gosub STATUS
  898.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  899.   ERN=0 : Rename "T"+Str$(FILES(OLFI))-" " To "TSWAP"
  900.   If ERN Then T$="ERROR SWAPPING FILE!" : Goto STATUS
  901.   Rename "T"+Str$(FILES(OLSW))-" " To "T"+Str$(FILES(OLFI))-" "
  902.   Rename "TSWAP" To "T"+Str$(FILES(OLSW))-" "
  903.   T$="SWAPPING COMPLETE!"
  904. STATUS:
  905.   Ink 2 : Bar 65,112 To 317,121
  906.   Gr Writing 0 : Ink 3,2 : Text 66,119,T$+Space$(32-Len(T$))
  907.   Ink 1,2 : Text 65,118,T$
  908. Return 
  909. NEWDIR:
  910.   If BUT=VERZ Then Return 
  911.   Shoot : A=VERZ : Gosub REALIZE
  912.   A=BUT : VERZ=BUT : Gosub PRESS
  913.   Repeat : Until Mouse Key=0
  914.   Gosub REDDIR
  915. Return 
  916. REDDIR:
  917.   T$="READING DIR..." : Gosub STATUS
  918.   Ink 2 : Bar 5,32 To 220,96
  919.   If Exist(VERZ$(VERZ))=0 Then INSERT[VERZ$(VERZ),INS$(VERZ)]
  920.   Dir$=VERZ$(VERZ)
  921.   FRE=Dfree/488/2
  922.   Ink 2 : Bar 161,101 To 317,110
  923.   Gr Writing 0 : Ink 3,2 : Text 161,109,Str$(FRE)-" "
  924.   Ink 1,2 : Text 160,108,Str$(FRE)-" "
  925.   FIL=0 : O=0 : Gosub UPDATSLID
  926.   For A=1 To 32 : NOM(A)=0 : Next 
  927.   B=0
  928.   For A=1 To 32
  929.     FILES(A)=-A
  930.     If Exist("T"+Str$(A)-" ") Then Inc FIL : FILES(FIL)=A : Gosub UPDATSLID Else Inc B : NOM(B)=A
  931.   Next 
  932.   For A=FIL+1 To 32
  933.     FILES(A)=-NOM(A-FIL)
  934.   Next 
  935.   If FIL=0 Then T$="NO MAP FOUND!"
  936.   If FIL=1 Then T$="1 MAP FOUND!"
  937.   If FIL>1 Then T$=Str$(FIL)-" "+" MAPS FOUND!"
  938.   Gosub STATUS
  939.   If SAV Then FIL=Min(FIL+FRE,32)
  940.   Pen 3 : Paper 2
  941.   OLFI=Min(FIL,OLFI)
  942.   If FIL=0 Then Return 
  943.   OLFI=Max(1,OLFI)
  944.   For A=1 To Min(FIL,8)
  945.     Locate 1,3+A
  946.     Gosub MAPCOM
  947.   Next 
  948.   Gosub UPDATSLID
  949. Return 
  950. MAPCOM:
  951.   Pen 3-(OLFI=A) : Print Abs(FILES(A));" ";At(8,);"*";
  952.   If Abs(FILES(A)<=MAPGU(VERZ)) Then Pen 5 : A$="GAME USED MAP!"
  953.   If Abs(FILES(A)>MAPGU(VERZ)) and FILES(A)>0 Then Pen 7 : A$="SPARE MAP!    "
  954.   If FILES(A)<0 Then Pen 6 : A$="NO MAP!       "
  955.   If OLFI=A Then Pen 4
  956.   Print A$
  957. Return 
  958. CHKBUTTON:
  959.   BUT=0
  960.   For A=1 To 14
  961.     If X=>B(A,0) and X<=B(A,2) and Y=>B(A,1) and Y<=B(A,3) Then BUT=A : Exit 
  962.   Next 
  963.   If A<6 or A=15 Then Return 
  964.   Shoot : Gosub PRESS
  965.   Repeat 
  966.     If BUT=6 Then Gosub SCRUP : Wait Vbl 
  967.     If BUT=7 Then Gosub SCRDOWN : Wait Vbl 
  968.   Until Mouse Key=0
  969.   Gosub REALIZE
  970. Return 
  971. PRESS:
  972.   If B(A,4)=1 Then Return 
  973.   B(A,4)=1
  974.   Ink 3 : Draw B(A,0),B(A,1) To B(A,2)-1,B(A,1)
  975.   Draw B(A,0),B(A,1) To B(A,0),B(A,3)-1
  976.   Ink 1 : Draw B(A,2),B(A,3) To B(A,0)+1,B(A,3)
  977.   Draw B(A,2),B(A,3) To B(A,2),B(A,1)+1
  978.   Screen Copy 3,B(A,0)+2,B(A,1)+2,B(A,2),B(A,3) To 3,B(A,0)+1,B(A,1)+1
  979. Return 
  980. REALIZE:
  981.   If B(A,4)=0 Then Return 
  982.   B(A,4)=0
  983.   Ink 1 : Draw B(A,0),B(A,1) To B(A,2)-1,B(A,1)
  984.   Draw B(A,0),B(A,1) To B(A,0),B(A,3)-1
  985.   Ink 3 : Draw B(A,2),B(A,3) To B(A,0)+1,B(A,3)
  986.   Draw B(A,2),B(A,3) To B(A,2),B(A,1)+1
  987.   Screen Copy 3,B(A,0)+1,B(A,1)+1,B(A,2)-2,B(A,3)-2 To 3,B(A,0)+2,B(A,1)+2
  988. Return 
  989. ' Buttons
  990.   Data 3,16,87,28
  991.   Data 90,16,182,28
  992.   Data 185,16,269,28
  993.   Data 272,16,316,28
  994.   Data 305,46,314,81
  995.   Data 303,30,316,43
  996.   Data 303,84,316,97
  997.   Data 3,122,39,134
  998.   Data 42,122,94,134
  999.   Data 97,122,133,134
  1000.   Data 136,122,172,134
  1001.   Data 175,122,243,134
  1002.   Data 246,122,298,134
  1003.   Data 301,122,316,134
  1004.   Data 91,48,223,90
  1005. ' Colortable for Littlemap 
  1006.   Data 7,7,7,7,3,3,3,3,3,3,3,3,3,3,3
  1007.   Data 2,2,2,6,6,6,6,6,6,6,6,6,6,6,6,6,6
  1008.   Data 2,2,2,5,5,5,5,5,5,5,5,5,5,5,5,5,5
  1009. AUS:
  1010. End Proc[T$]
  1011. Procedure INSERT[D$,T$]
  1012.   Screen Open 5,320,9,2,0
  1013.   Curs Off : Palette 0,0 : Paper 0 : Pen 1
  1014.   Centre T$
  1015.   Y=50 : SY=5 : Fade 1,0,$FFF : A=0
  1016.   Do 
  1017.     If Y>128 Then Dec SY
  1018.     If Y<128 Then Inc SY
  1019.     Add Y,SY : Screen Display 5,128,Y+40,,7 : Wait Vbl 
  1020.     Add A,1,0 To 99 : If A=0 Then If Exist(D$) Then Exit 
  1021.   Loop 
  1022.   Print : Centre "THANX!!!"
  1023.   For A=0 To 49
  1024.     If Y>128 Then Dec SY
  1025.     If Y<128 Then Inc SY
  1026.     If A=33 Then Fade 1
  1027.     Add Y,SY : Screen Display 5,128,Y+40,, : Wait Vbl 
  1028.   Next 
  1029.   Screen Close 5
  1030. End Proc
  1031. Procedure HANDLER
  1032.   ERN=Errn
  1033.   If ERN<>26 Then Resume Next 
  1034.   Amal Off 
  1035.   Sprite Off 
  1036.   Bob Off 
  1037.   For A=0 To 5
  1038.     Screen Open A,128,8,2,0
  1039.     Screen Close A
  1040.   Next 
  1041.   Screen Open 0,320,200,4,0
  1042.   Curs Off : Flash Off : Cls 0 : Paper 0 : Hide On 
  1043.   Double Buffer 
  1044.   Flash 1,"(FFF,32)(CCC,4)(999,4)(666,4)(999,4)(CCC,4)"
  1045.   Flash 2,"(CCC,32)(999,4)(666,4)(333,4)(666,4)(999,4)"
  1046.   Flash 3,"(999,32)(666,4)(333,4)(000,4)(333,4)(666,4)"
  1047.   A$="L R0=0; L R1=0; L R2=20; L R3=0; "
  1048.   F$="L R0=1280; L R1=1000; L R2=-30; L R3=30; "
  1049.   B$="A: P; L R0=R0+R2; L R1=R1+R3; L X=R0/10; L Y=R1/10; L R3=R3+1; "
  1050.   B$=B$+"   I R1>1800 J B; "
  1051.   B$=B$+"C: I R0<0 J L; "
  1052.   C$="   I R0>1680 J L; "
  1053.   D$="   Jump A;"
  1054.   D$=D$+"B: L R3=1-R3; L R4=1; J C; "
  1055.   D$=D$+"L: L R2=0-R2; L R4=2; J A; "
  1056.   E$="  I R0>1280 J L; "
  1057.   Bob 0,0,-10,9
  1058.   Bob 1,0,-10,10
  1059.   Channel 0 To Bob 0
  1060.   Channel 1 To Bob 1
  1061.   Amal 0,A$+B$+C$+D$
  1062.   Amal 1,F$+B$+E$+D$
  1063.   Amal On 
  1064.   Repeat 
  1065.     If Amreg(0,4)=1 Then Amreg(0,4)=0 : Play 1,13,0
  1066.     If Amreg(0,4)=2 Then Amreg(0,4)=0 : Play 2,18,0
  1067.     If Amreg(1,4)=1 Then Amreg(1,4)=0 : Play 4,20,0
  1068.     If Amreg(1,4)=2 Then Amreg(1,4)=0 : Play 8,23,0
  1069.   Until Mouse Key
  1070.   Amal Off 
  1071.   Sprite Off 
  1072.   Screen Close 0
  1073.   End 
  1074. End Proc